package com.tao.innerclass;

/**
 * 局部内部类
 */

public class LocalInnerClass {
    public static void main(String[] args) {
        //Inner01 inner01 = new Inner01(); 外部其他类不能访问局部内部类
        Outer01 outer01 = new Outer01();
        outer01.m1();
        System.out.println("outer01 的 hashcode=" + outer01);
    }
}

class Outer01{
    private int n1 = 100;
    private void m2(){
        System.out.println("Outer01m2()");
    }
    public void m1(){//外部类的一个方法
        final class Inner01{//1.这是一个局部内部类，它通常在外部类的方法中，有类名
            private int n1 = 200;
            public  void m3(){
                //2.内部类可以访问外部类的所有成员，包括私有的，直接访问就好
                //7.外部类和局部内部类的成员重名时，遵循就近原则，如果想访问外部类的成员，可以用外部类名。this.成员
                //Outer01.this就等于外部类的对象outer01
                System.out.println("局部内部类的n1” + n1 + “外部类的n1" +Outer01.this.n1);
                System.out.println("Outer01.this hashcode=" + Outer01.this);
                m2();
            }
        }
        //class Inner02 extends Inner01{}
        // 3.内部类不能添加访问修饰符，因为他的地位是外部类的一个局部变量，但是可以用final修饰

        // 5.外部类要访问局部内部类的成员，必须要在作用域（方法/代码块）中创建对象，再访问
        Inner01 inner01 = new Inner01();
        inner01.m3();
    }
    {//代码块
        class Inner03{
            //4.作用域 : 仅仅在定义它的方法或代码块中
        }
    }

}